package com.tecent.weixin.open.service;

import com.tecent.weixin.open.bean.Configure;
import com.tecent.weixin.open.bean.PayNotifyData;
import com.tecent.weixin.open.bean.PrePayData;
import com.tecent.weixin.open.bean.UnifiedOrderReqData;
import com.tecent.weixin.mp.service.WeChatHttpClientService;
import com.tecent.weixin.utils.XmlJsonParser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 *
 * 微信支付页面流程  1、生成支付授权页面  ->2用户点击之后获取用户的openid->3用户提交表单，统一支付接口返回前端需要的json数据
 * 2、
 */
@Service(value = "openWeChatPayService")
public class OpenWeChatPayService {
    @Autowired
    WeChatHttpClientService weChatHttpClientService;

    /**
     * App支付
     *
     * @param body         商品名称或者订单生成的名称
     * @param out_trade_no 系统本身的订单号
     * @param total_fee    总价钱
     * @param notice_url   付款成功后的回调路径，需注意商户平台配置的路径下的子路径
     * @param product_id   扫码之后返回的数值
     * @return 返回激活微信支付的参数值（json串）
     */
    public String getUnifiedNativePay(String body, String out_trade_no, int total_fee, String notice_url, String product_id) throws Exception {
        UnifiedOrderReqData reqData = new UnifiedOrderReqData.UnifiedOrderReqDataBuilder(
                body, out_trade_no, total_fee, notice_url, Configure.APPTradeType).setProduct_id(product_id).build();
        String str = weChatHttpClientService.doPostXml(Configure.UNIFIED_ORDER_API, XmlJsonParser.toXML(reqData));
        PayNotifyData data = XmlJsonParser.getObjectFromXML(str, PayNotifyData.class);
        System.out.println("result:" + data.toString());
        PrePayData prePayData = new PrePayData();
        prePayData.setPrepayId(data.getPrepay_id());
        prePayData.sign();
        String result = XmlJsonParser.toJson(prePayData);
        return result;
    }
}
